import logging
import logging.handlers


def log(ob="console", level="DEBUG", filename=None, when='D', interval=1, backup_count=1000):
    """
           ob:打印对象 console、file
           filename: 日志文件名
           when: 日志轮换的间隔时间
           interval: 间隔时间单位的个数，指等待多少个 when 后继续进行日志记录
           backup_count: 保留日志文件的个数
    """
    logging.getLogger('urllib3').setLevel(logging.WARNING)  # 升高等级，屏蔽第三方模块的日志

    # 创建日志器对象
    logger = logging.getLogger()
    # 设置日志打印级别 设置高级无法打印低级
    logger.setLevel(getattr(logging, level))

    # logging.DEBUG 调试级别 打印所有信息
    # logging.INFO 信息级别
    # logging.WARNING 警告级别
    # logging.ERROR 错误级别
    # logging.CRITICAL 严重错误级别
    # 日志格式
    fmt = "%(asctime)s %(levelname)s [%(filename)s(%(funcName)s:%(lineno)d)] - %(message)s"
    formatter = logging.Formatter(fmt)

    if ob == "file":
        # 创建文件日志对象
        fh = logging.handlers.TimedRotatingFileHandler(filename,
                                                       when=when,
                                                       interval=interval,
                                                       backupCount=backup_count,
                                                       encoding='utf-8')
        # 设置格式
        fh.setFormatter(formatter)
        # 添加处理器
        logger.addHandler(fh)
    else:
        # 创建控制台日志对象
        st = logging.StreamHandler()
        # 给处理器设置日志信息格式
        st.setFormatter(formatter)
        # 给日志器添加处理器
        logger.addHandler(st)